package Algorithm.SortAlgorithm;

/**
 * @Author self
 * @Date 2024/10/30 21:27
 * @Describe
 */
/**
 * BubbleSort 类提供了冒泡排序算法的实现。
 * 冒泡排序是一种简单的排序算法，通过重复遍历列表，比较相邻元素并在必要时交换它们来工作。
 * 这个过程会重复进行，直到整个列表排序完成。
 */
public class BubbleSort {

    /**
     * 使用冒泡排序算法对整数数组进行排序。
     *
     * @param nums 要排序的整数数组。
     * @return 排序后的整数数组。
     */
    public int[] bubbleSort(int[] nums) {
        // 检查数组是否为空或长度小于2，如果是，则无需排序，直接返回原数组。
        if (nums == null || nums.length < 2) {
            return nums;
        }
        int len = nums.length;
        // 外层循环控制遍历次数
        for (int i = 0; i < len; i++) {
            // 内层循环进行相邻元素的比较和交换
            for (int j = 0; j < len - i - 1; j++) {
                if (nums[j] > nums[j + 1]) {
                    swap(nums, j, j + 1);
                }
            }
        }
        return nums;
    }

    /**
     * 交换数组中两个指定位置的元素。
     *
     * @param nums 整数数组。
     * @param i 第一个元素的位置。
     * @param j 第二个元素的位置。
     */
    private void swap(int[] nums, int i, int j) {
        int tmp = nums[i];
        nums[i] = nums[j];
        nums[j] = tmp;
    }

    /**
     * 主函数，用于测试冒泡排序。
     */
    public static void main(String[] args) {
        // 初始化一个整数数组
        int[] arr = new int[]{-1, -3, -2, -66, 4};
        // 创建冒泡排序实例
        BubbleSort bubbleSort = new BubbleSort();
        // 对数组进行排序
        bubbleSort.bubbleSort(arr);
        // 遍历并打印排序后的数组
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}

